from django.contrib.auth import get_user_model
from django.conf import settings
import logging

logger = logging.getLogger(__name__)

def get_or_create_test_user():
    """获取或创建测试用户"""
    User = get_user_model()
    config = settings.TEST_USER_CONFIG
    
    try:
        user = User.objects.get(username=config['USERNAME'])
        logger.info(f"使用测试用户: {user.username}")
        return user
    except User.DoesNotExist:
        if config.get('USE_TEST_USER_FALLBACK', True):
            logger.warning(f"测试用户 {config['USERNAME']} 不存在，尝试创建...")
            try:
                user = User.objects.create_user(
                    username=config['USERNAME'],
                    email=config['EMAIL'],
                    password=config['PASSWORD'],
                    platform='web',
                    is_active=True
                )
                logger.warning(f"已创建测试用户: {user.username}")
                return user
            except Exception as e:
                logger.error(f"创建测试用户失败: {e}")
                return None
        else:
            logger.error("测试用户不存在且未启用回退创建功能")
            return None

def get_request_user(request):
    """从请求中获取用户或使用测试用户"""
    # 如果请求中有认证用户，优先使用
    if request.user and request.user.is_authenticated:
        logger.info(f"使用认证用户: {request.user.username}")
        return request.user
    
    # 否则使用测试用户（带警告）
    logger.warning("未提供用户认证信息，使用测试用户执行操作")
    test_user = get_or_create_test_user()
    if test_user:
        logger.warning(f"使用测试用户执行操作: {test_user.username}")
        return test_user
    else:
        logger.error("无法获取测试用户，请检查配置")
        return None